package net.nice19.smboard.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Service;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

@Service
public class SessionInterceptor extends HandlerInterceptorAdapter{
	@Override
	public boolean preHandle(HttpServletRequest request,
			HttpServletResponse response, Object handler) throws Exception {
		// check variable
		Object SITE_LEVEL = request.getSession().getAttribute("SITE_LEVEL");
		Object SITE_UID = request.getSession().getAttribute("SITE_UID");
		
		System.out.println(request.getRequestURI());
		System.out.println(request.getServerName());
		System.out.println(request.getContextPath());
		System.out.println(request.getRequestURL());
		System.out.println("getValue == " + request.getQueryString()); //겟으로 오는거 
		
		

		/*
		 * 
		 * 
		 ★ request 내장 객체 메서드
				1. getMethod() : 요청 방식 알아내기 (get, post)
				2. getRequestRUI() : 요청 파일 경로 알아내기 (예: jsp2/RequestTest.jsp)
				3. getRequsetURL() : 요청 경로 알아내기 (예: http://localhost:9000/jsp2/Request.jsp)
				
				4. getRemoteHost() : 클라이언트 호스트 이름 알아내기
				5. getRemoteAddr() : 클라이언트 주소 알아내기
				6. getRemoteUser() : (인증을 이용한 경우) 이용자 ID 알아내기
				
				7. getProtocol() : 사용중인 프로토콜 알아내기(HTTP1.1)
				8. getServerName() : 서버 도메인 이름 알아 내기
				9. getServerPort() : 서버 Port 알아내기
				
				10. getHeader(name) : name에 해당하는 요청 헤더 항목 값을 알아내기
				
				11. getParameter(name) : name에 해당하는 파라미터값 얻는다.
				12. getParameterValues(name) : name에 해당하는 파라미터값을 모두 얻는다.
				13. getParameterNames() : form에 있는 모든 파라미터 이름을 얻는다.
		 * 
		 * 
		 * 
		 * 
		 * 
		 * ★ response 내장 객체 메서드
				1. setContentType(type) : 출력 문서의 contentType 설정
				2. getCharacterEncoding() : 문자 인코딩 설정 내용 알아내기
				3. setHeader(name, value) : 응당 헤더 설정
				   예: response.setHeader("Refresh", "3;URL=http://www.daum.net");//3초후 URL로 이동
				4. sendRedirect("url") : 지정 url로 요청을 재전송한다.
				   예: response.sendRedirect("로컬URL");
				      response.sendRedirect("외부URL");
		*/
		
		
		String cxtpath = request.getContextPath();
		String reqUri  = request.getRequestURI();
		
		
		// -- 관리자 페이지 진입시  --//
		if(request.getRequestURI().contains("/lmAdm/")){
			//관리자 페이지 이면
			System.out.println( request.getContextPath());
			//if(SITE_LEVEL.toString().equals("")|| Integer.parseInt( SITE_LEVEL.toString()) < 2){
			//	System.out.println("레벨이 낮아서 탈락");
			//}
			
			
			if(request.getRequestURI().contains("/lmAdm/login.do")) return true;
			if(request.getRequestURI().contains("/lmAdm/loginProcess.do")) return true;
			if(SITE_UID == "" ||SITE_UID == null ){
				response.sendRedirect(request.getContextPath() + "/lmAdm/login.do");
				return true;
			}
			System.out.println(SITE_UID);
			System.out.println("관리자 진입");
			
			
			return true;
		}
		
		
		
		
		//
		/*
		// pass through when access login.do, join.do
		if(request.getRequestURI().equals("/SummerBoard/login.do") || 
		request.getRequestURI().equals("/SummerBoard/member/join.do")){
			if(userId != null){
				response.sendRedirect(request.getContextPath() + "/board/list.do");
				return true;
			} else {
				return true;
			}
		}
		//
		// where other pages		
		if(userId == null){
			response.sendRedirect(request.getContextPath() + "/login.do");
			return false;
		} else {
			return true;
		}
		//		
		 *
		 */
		
		return true;
	}
	
	@Override
	public void postHandle(HttpServletRequest request,
			HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
	}
}
